# -*- coding: utf-8 -*-

from PyQt4.QtCore import QObject, SIGNAL, SLOT, QString, Qt
from PyQt4.QtGui import *

from db.runnerUiFinalizarPedido import RunnerUiFinalizaPedido

try:
    _fromUtf8 = QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s


class ActionsUiAddDb():

    def __init__(self, uiAddDb, db):
        """
            Construtor.
        """
        self.uiAddDb = uiAddDb
        self.db = db
        self.connectSlot()
        self.atualizarTabela()
        self.preencherTreeWidget()



    def connectSlot(self):
        """
        
        """
        QObject.connect(
                        self.uiAddDb.pushButtonInserir,
                        SIGNAL("clicked()"),
                        self.pushButtonInserirClicked)
        QObject.connect(
                        self.uiAddDb.pushButtonRemover,
                        SIGNAL("clicked()"),
                        self.pushButtonRemoverClicked)
        QObject.connect(
                        self.uiAddDb.pushButtonVisualizar,
                        SIGNAL("clicked()"),
                        self.visualizarPedidoClicked)
        QObject.connect(
                        self.uiAddDb.pushButtonNumPedido,
                        SIGNAL("clicked()"),
                        self.pushButtonNumPedidoClicked)
        QObject.connect(
                        self.uiAddDb.pushButtonFinalizar,
                        SIGNAL("clicked()"),
                        self.pushButtonFinalizarClicked)
        QObject.connect(
                        self.uiAddDb.pushButtonLimpar,
                        SIGNAL("clicked()"),
                        self.pushButtonLimparClicked)
        QObject.connect(
                        self.uiAddDb.tableWidget,
                        SIGNAL("cellDoubleClicked(int,int)"),
                        self.celulaClicked)



    def pushButtonInserirClicked(self):
        """
            Metodo com a acao do botao inserir produto.
        """
        self.inserirProdutosNaTabela()



    def pushButtonRemoverClicked(self):
        """
        
        """
        self.atualizarTabela()



    def visualizarPedidoClicked(self):
        """
        
        """
        pass



    def pushButtonLimparClicked(self):
        """
        
        """
        num_pedido = str(self.uiAddDb.lineEditNumPedido.text())
        reply = QMessageBox.question(
                                     None,
                                     " TSM ",
                                     _fromUtf8(
                                     "Remover Itens do Pedido?"),
                                     QMessageBox.Yes | QMessageBox.No)
        if reply == QMessageBox.No:
            pass
        elif reply == QMessageBox.Yes:
            self.atualizarTabela()
            self.db.removerNumPedido(num_pedido)



    def pushButtonFinalizarClicked(self):
        """
        
        """
        num_pedido = str(self.uiAddDb.lineEditNumPedido.text())
        self.uiFin = RunnerUiFinalizaPedido()
        self.uiFin.setupUi(num_pedido)
        self.uiAddDb.dialog.close()
        self.uiFin.show()



    def atualizarTabela(self):
        """
        
        """
        headers = ["     Produto        ",
                   " Numero de Serie    ",
                   " Ordem de Producao  ",
                   " Numero do Pedido   ",
                   "      Status        "]
        self.uiAddDb.tableWidget.clear()
        self.uiAddDb.tableWidget.setRowCount(0)
        self.uiAddDb.tableWidget.setColumnCount(len(headers))
        self.uiAddDb.tableWidget.setHorizontalHeaderLabels(headers)
        self.uiAddDb.tableWidget.resizeColumnsToContents()
        self.uiAddDb.tableWidget.setFocus()



    def selecionarProduto(self):
        """
        
        """
        item = self.uiAddDb.treeWidget.currentItem()
        
        if item == None:
            QMessageBox.critical(None,
                                 " TSM ",
                                 _fromUtf8(
                                 "Selecione um Produto."))
            return item
        else:
            produto = str(item.text(0))
            _produto = produto.split(" ")
            i = len(_produto)
            i = i -1
        
        if _produto[i] == "MHz":
            QMessageBox.critical(None,
                                 " TSM ",
                                 _fromUtf8(
                                 "Selecione um Produto."))
            return _produto[i]
        else:
            produto_id = self.db.getIdFromProduto(produto)
            return produto_id



    def preencherTreeWidget(self):
        """
            Metodo para popular treeWidget
        """
        headers = []
        faixas = self.db.getFaixas()
        faixas.sort()
        [headers.append(item) for item in faixas if not headers.count(item)]
        i = 0
        j = len(headers)
        
        while i < j:
            _text = headers[i]
            produto = self.db.popularTree(_text[0])
            text = str(_text[0])
            item = QTreeWidgetItem(self.uiAddDb.treeWidget)
            self.uiAddDb.treeWidget.topLevelItem(i).setText(
                                                   0,
                                                   QApplication.translate(
                                                   "MainWindow",
                                                   text,
                                                   None,
                                                   QApplication.
                                                   UnicodeUTF8))
            m = 0
            n = len(produto)
            while m < n:
                item1 = QTreeWidgetItem(item)
                _text1 = produto[m]
                text1 = _text1[0]
                self.uiAddDb.treeWidget.topLevelItem(i).child(m).setText(
                                                0,
                                                QApplication.translate(
                                                "MainWindow",
                                                text1,
                                                None,
                                                QApplication.UnicodeUTF8))
                m += 1
            i += 1



    def celulaClicked(self):
        """
        
        """
        self.comboBox = QComboBox()
        self.comboBox.addItem("Status")
        self.comboBox.addItem("Pedido")
        self.comboBox.addItem("Finalizado")
        celula = self.uiAddDb.tableWidget.currentRow()
        self.uiAddDb.tableWidget.setCellWidget(celula, 4, self.comboBox)
        QObject.connect(
                        self.comboBox,
                        SIGNAL("currentIndexChanged(int)"),
                        self.mudaCorCelula)



    def mudaCorCelula(self):
        """
        
        """
        i = 0
        texto = str(self.comboBox.currentText())
        celula = int(self.uiAddDb.tableWidget.currentRow())
        if texto == "Finalizado":
            num_serie = str(self.uiAddDb.tableWidget.item(celula, 1).text())
            self.db.setStatusTableChanged(texto, num_serie)
            self.uiAddDb.tableWidget.removeCellWidget(celula, 4)
            self.uiAddDb.tableWidget.setItem(
                                              celula,
                                              4,
                                              QTableWidgetItem(
                                              "Finalizado"))
            while i < 5:
                self.uiAddDb.tableWidget.item(
                                              celula,
                                              i).setData(
                                              Qt.BackgroundRole,
                                              QColor(255,0,0))
                i += 1
        
        elif texto == "Pedido":
            num_serie = str(self.uiAddDb.tableWidget.item(celula, 1).text())
            self.db.setStatusTableChanged(texto, num_serie)
            self.uiAddDb.tableWidget.removeCellWidget(celula, 4)
            self.uiAddDb.tableWidget.setItem(
                                              celula,
                                              4,
                                              QTableWidgetItem(
                                              "Pedido"))
            while i < 5:
                self.uiAddDb.tableWidget.item(
                                              celula,
                                              i).setData(
                                              Qt.BackgroundRole,
                                              QColor("White"))
                i += 1




    def pushButtonNumPedidoClicked(self):
        """
        
        """
        num_pedido = str(self.uiAddDb.lineEditNumPedido.text())
        
        if num_pedido == "":
            QMessageBox.critical(
                                 None,
                                 " TSM ",
                                 _fromUtf8(
                                 "Insira o número do pedido."))
        
        else:
            _status = self.db.getStatusPedido(num_pedido)
            
            if _status == None:
                QMessageBox.information(
                                         None,
                                         " TSM ",
                                         _fromUtf8(
                                         "Adicione os produtos."))
            
            else:
                status = _status[0]
                if status == "Finalizado":
                    QMessageBox.information(
                                             None,
                                             " TSM ",
                                             _fromUtf8(
                                             "Este pedido está finalizado."))
                
                elif status == "Pedido":
                    QMessageBox.information(
                                             None,
                                             " TSM ",
                                             _fromUtf8(
                                             "Este pedido está aberto."))
                    
                    prod = self.db.pesquisarPorPedido(num_pedido)
                    numLinhas = int(len(prod))
                    self.uiAddDb.tableWidget.setSortingEnabled(False)
                    self.uiAddDb.tableWidget.setRowCount(numLinhas)
                    headers = ["    PRODUTO    ",
                                "     SERIAL    ",
                                "    PRODUCAO    ",
                                "    PEDIDO    ",
                                "    STATUS    "]
                    self.uiAddDb.tableWidget.setColumnCount(len(headers))
                    self.uiAddDb.tableWidget.setHorizontalHeaderLabels(headers)
                    i = 0
                    
                    for num in prod:
                        id_produto = str(num[0])
                        _produto = self.db.getNomeProduto(id_produto)
                        produto = _produto[0]
                        numSerie = str(num[1])
                        ord_prod = str(num[2])
                        status = str(num[3])
                        self.uiAddDb.tableWidget.setItem(
                                                         i,
                                                         0,
                                                         QTableWidgetItem(
                                                         produto))
                        self.uiAddDb.tableWidget.setItem(
                                                         i,
                                                         1,
                                                         QTableWidgetItem(
                                                         numSerie))
                        self.uiAddDb.tableWidget.setItem(
                                                         i,
                                                         2,
                                                         QTableWidgetItem(
                                                         ord_prod))
                        self.uiAddDb.tableWidget.setItem(
                                                         i,
                                                         3,
                                                         QTableWidgetItem(
                                                         num_pedido))
                        self.uiAddDb.tableWidget.setItem(
                                                         i,
                                                         4,
                                                         QTableWidgetItem(
                                                         status))
                        i += 1
                    self.uiAddDb.tableWidget.setSortingEnabled(True)
                    self.uiAddDb.tableWidget.sortItems(1, 0)
                    self.uiAddDb.tableWidget.resizeColumnsToContents()
                    self.uiAddDb.tableWidget.setFocus()



    def inserirProdutosNaTabela(self):
        """
        
        """
        num_pedido = str(self.uiAddDb.lineEditNumPedido.text())
        if num_pedido == "":
            QMessageBox.critical(
                                 None,
                                 " TSM ",
                                 _fromUtf8(
                                 "Insira o número do pedido."))
        
        else:
            id_produto = self.selecionarProduto()
            if id_produto == None:
                pass
            elif id_produto == "MHz":
                pass
            else:
                response = self.db.getInfoFromProduto(id_produto)
                produto = response[0]
                produto = produto[0]
                num_ord = response[1]
                
                if num_ord == []:
                    QMessageBox.critical(
                                        None,
                                        " TSM ",
                                        _fromUtf8(
                                        "Nao ha itens suficientes em estoque."))
                                         
                
                else:
                    num_ord.sort()
                    totalProdutosDisponiveis = int(len(num_ord))
                    quantidade = int(self.uiAddDb.spinBoxQuantidade.text())
                    
                    if totalProdutosDisponiveis < quantidade:
                        QMessageBox.critical(
                                        None,
                                        " TSM ",
                                        _fromUtf8(
                                        "Nao ha itens suficientes em estoque."))
                                             
                    
                    else:
                        numLinhas = quantidade
                        inicioLinha = int(self.uiAddDb.tableWidget.rowCount())
                        totalLinhas = inicioLinha + numLinhas
                        self.uiAddDb.tableWidget.setSortingEnabled(False)
                        self.uiAddDb.tableWidget.setRowCount(totalLinhas)
                        headers = ["    Produto      ",
                                    "Numero de Serie",
                                    "Ordem de Producao",
                                    "Numero do Pedido",
                                    "    Status     "]
                        self.uiAddDb.tableWidget.setColumnCount(len(headers))
                        self.uiAddDb.tableWidget.setHorizontalHeaderLabels(
                                                                        headers)
                        i = 0
                        m = inicioLinha
                        status = "Pedido"
                        
                        while i < numLinhas:
                            num = num_ord[i]
                            numSerie = str(num[0])
                            ord_producao = str(num[1])
                            self.db.inserirNumPedido(
                                                     num_pedido,
                                                     id_produto,
                                                     numSerie)
                            self.uiAddDb.tableWidget.setItem(
                                                             m,
                                                             0,
                                                             QTableWidgetItem(
                                                             produto))
                            self.uiAddDb.tableWidget.setItem(
                                                             m,
                                                             1,
                                                             QTableWidgetItem(
                                                             numSerie))
                            self.uiAddDb.tableWidget.setItem(
                                                             m,
                                                             2,
                                                             QTableWidgetItem(
                                                             ord_producao))
                            self.uiAddDb.tableWidget.setItem(
                                                             m,
                                                             3,
                                                             QTableWidgetItem(
                                                             num_pedido))
                            self.uiAddDb.tableWidget.setItem(
                                                             m,
                                                             4,
                                                             QTableWidgetItem(
                                                             status))
                            i += 1
                            m += 1
                        self.uiAddDb.tableWidget.setSortingEnabled(True)
                        self.uiAddDb.tableWidget.sortItems(1, 0)
                        self.uiAddDb.tableWidget.resizeColumnsToContents()
                        self.uiAddDb.tableWidget.setFocus()
